Conversation
…ace with PARAKEET_ASR_URL in Docker Compose and documentation.
…ad of offline option in ChronicleSetup.
Update dev
…rces. Removed unused Google API dependencies from uv.lock.
… pip install command
Add restart functionality
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThis PR migrates the codebase from an "offline" ASR provider model to an explicit "parakeet" provider naming convention, removing references to Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
.github/workflows/robot-tests.yml (3)
66-69: Good addition of uv package manager.The integration of
uvaligns with modern Python tooling practices and the project's adoption of uv-based workflows.Consider pinning the uv version instead of using "latest" for reproducible builds:
🔎 Suggested change
- name: Install uv uses: astral-sh/setup-uv@v4 with: - version: "latest" + version: "0.5.11"
269-281: Useuv run python3for consistency.Based on learnings, direct
python3calls should be replaced withuv run python3for consistency with the project's Python execution standard.🔎 Apply these changes
For the test summary generation step:
# Parse test results - python3 << 'PYTHON_SCRIPT' > test_summary.txt + uv run python3 << 'PYTHON_SCRIPT' > test_summary.txt import xml.etree.ElementTree as ETFor the display test results step:
echo "Test results generated successfully" echo "========================================" - python3 << 'PYTHON_SCRIPT' + uv run python3 << 'PYTHON_SCRIPT' import xml.etree.ElementTree as ETAlso applies to: 360-371
66-69: Consider adding caching for uv.Adding cache configuration for uv could improve workflow performance, similar to the existing Docker and pip caching.
🔎 Example cache configuration
- name: Install uv uses: astral-sh/setup-uv@v4 with: version: "latest" + enable-cache: trueOr use a manual cache step:
- name: Cache uv uses: actions/cache@v4 with: path: ~/.cache/uv key: ${{ runner.os }}-uv-${{ hashFiles('**/pyproject.toml') }} restore-keys: | ${{ runner.os }}-uv-
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
backends/advanced/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (17)
.github/workflows/robot-tests.yml(1 hunks)Docs/init-system.md(1 hunks)Docs/ports-and-access.md(2 hunks)backends/advanced/docker-compose.yml(0 hunks)backends/advanced/init.py(1 hunks)backends/advanced/run-test.sh(2 hunks)backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py(1 hunks)backends/advanced/src/advanced_omi_backend/services/transcription/__init__.py(0 hunks)backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py(1 hunks)backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py(1 hunks)backends/advanced/start-workers.sh(2 hunks)backends/advanced/tests/test_integration.py(3 hunks)extras/asr-services/README.md(1 hunks)extras/asr-services/docker-compose-test.yml(1 hunks)extras/asr-services/quickstart.md(1 hunks)quickstart.md(2 hunks)services.py(3 hunks)
💤 Files with no reviewable changes (2)
- backends/advanced/docker-compose.yml
- backends/advanced/src/advanced_omi_backend/services/transcription/init.py
🧰 Additional context used
📓 Path-based instructions (4)
**/docker-compose*.{yml,yaml}
📄 CodeRabbit inference engine (CLAUDE.md)
Check if src/ is volume mounted. If not, run
docker compose buildso that code changes are reflected. Do not simply rundocker compose restartas it will not rebuild the image.
Files:
extras/asr-services/docker-compose-test.yml
**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.py: Use Black formatter with 100-character line length for Python code
Use isort for import sorting in Python code
ALL imports must be at the top of the file after the docstring. NEVER import modules in the middle of functions or files. Use lazy imports sparingly and only when absolutely necessary for circular import issues.
Group imports in order: standard library, third-party, local imports
Always raise errors, never silently ignore. Use explicit error handling with proper exceptions rather than silent failures.
Do not add defensivehasattr()checks. Research and understand input/response or class structure instead.
Useuv run pythonoruv run python3instead of directpythonorpython3commands for Python execution
Files:
backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.pybackends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.pybackends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.pyservices.pybackends/advanced/init.pybackends/advanced/tests/test_integration.py
**/{websocket,ws,audio,streaming}*.py
📄 CodeRabbit inference engine (CLAUDE.md)
Use Wyoming protocol (JSONL + binary) for WebSocket communication with structured audio sessions
Files:
backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.pybackends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py
**/{conversation,audio,memory,processing}*.py
📄 CodeRabbit inference engine (CLAUDE.md)
Only create conversations when speech is detected, eliminating noise-only sessions. Store all audio sessions in
audio_chunkscollection, conversations only inconversationscollection when speech is detected.
Files:
backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py
🧠 Learnings (2)
📚 Learning: 2025-12-08T23:52:34.959Z
Learnt from: AnkushMalaker
Repo: chronicler-ai/chronicle PR: 178
File: backends/advanced/src/advanced_omi_backend/services/memory/providers/mycelia.py:218-223
Timestamp: 2025-12-08T23:52:34.959Z
Learning: In Python code (chronicle project), prefer logging.exception() inside except blocks to automatically log the full stack trace. When re-raising exceptions, always chain with 'raise ... from e' to preserve the original context; use 'raise ... from None' only if you explicitly want to suppress the context. This improves debuggability across Python files.
Applied to files:
backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.pybackends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.pybackends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.pyservices.pybackends/advanced/init.pybackends/advanced/tests/test_integration.py
📚 Learning: 2025-12-16T14:24:28.301Z
Learnt from: CR
Repo: chronicler-ai/chronicle PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T14:24:28.301Z
Learning: Applies to **/*.py : Use `uv run python` or `uv run python3` instead of direct `python` or `python3` commands for Python execution
Applied to files:
Docs/ports-and-access.md.github/workflows/robot-tests.ymlDocs/init-system.md
🧬 Code graph analysis (1)
backends/advanced/run-test.sh (2)
backends/advanced/setup-https.sh (4)
print_info(15-17)print_error(27-29)print_warning(23-25)print_success(19-21)run-test.sh (4)
print_info(17-19)print_error(29-31)print_warning(25-27)print_success(21-23)
🪛 markdownlint-cli2 (0.18.1)
Docs/init-system.md
153-153: Bare URL used
(MD034, no-bare-urls)
154-154: Bare URL used
(MD034, no-bare-urls)
154-154: Bare URL used
(MD034, no-bare-urls)
155-155: Bare URL used
(MD034, no-bare-urls)
156-156: Bare URL used
(MD034, no-bare-urls)
157-157: Bare URL used
(MD034, no-bare-urls)
🪛 Ruff (0.14.8)
backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py
40-40: Avoid specifying long messages outside the exception class
(TRY003)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: integration-tests
- GitHub Check: robot-tests
🔇 Additional comments (22)
.github/workflows/robot-tests.yml (1)
73-73: Correct usage of uv for dependency installation.The
--systemflag is appropriate for CI environments where system-wide package installation is required.extras/asr-services/docker-compose-test.yml (1)
38-41: Code changes require rebuild - src/ not volume mounted.The src/ directory is not volume mounted in this test configuration. Code changes will require rebuilding the image rather than just restarting the service.
As per coding guidelines, when making code changes to the parakeet-asr service, use:
docker compose -f extras/asr-services/docker-compose-test.yml build parakeet-asr-test docker compose -f extras/asr-services/docker-compose-test.yml up -d parakeet-asr-testInstead of:
docker compose -f extras/asr-services/docker-compose-test.yml restart parakeet-asr-testThis ensures code changes are properly reflected in the test environment.
backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py (1)
38-40: LGTM - Clean migration from offline to Parakeet naming.The removal of the OFFLINE_ASR_TCP_URI fallback correctly enforces explicit Parakeet URL configuration, aligning with the PR's migration objectives.
Note: The static analysis hint (TRY003) about the error message is a false positive here - the message is concise and appropriate for this ValueError.
extras/asr-services/README.md (1)
107-111: LGTM - Clear documentation update.The updated configuration example correctly reflects the migration to explicit Parakeet provider naming and provides helpful guidance for users.
quickstart.md (2)
197-202: LGTM - User-friendly service startup documentation.Providing both the convenience script and direct command options gives users flexibility while maintaining consistency with the uv-based execution guidelines.
291-305: LGTM - Comprehensive troubleshooting guidance.The new service management and troubleshooting sections provide clear, actionable commands that align with the newly implemented restart functionality.
Docs/ports-and-access.md (1)
104-121: LGTM - Excellent operational guidance.The distinction between
restartfor configuration changes andstop+start --buildfor code changes is clearly documented and helps users avoid common pitfalls.Note: The static analysis warnings about bare URLs are false positives - these URLs are appropriately formatted within code blocks.
Docs/init-system.md (2)
151-177: LGTM - Comprehensive restart documentation.The restart functionality is well-documented with clear operational guidance. The distinction between restart (configuration changes) and rebuild (code changes) is particularly helpful.
Note: Static analysis warnings about bare URLs in command examples are false positives.
183-193: LGTM - Standardized manual service commands.The explicit use of
--build -dflags provides clarity and consistency across all manual service management examples.services.py (3)
221-238: LGTM - Minor formatting consistency improvements.The whitespace adjustments maintain code consistency without affecting functionality.
240-262: LGTM - Well-implemented restart functionality.The
restart_servicesfunction follows established patterns and correctly usesdocker compose restartfor configuration changes without rebuilding. This aligns with the documented behavior where restart is for.envupdates, whilestop+start --buildis for code changes.
304-309: LGTM - Consistent CLI integration.The restart command is properly integrated with argument parsing and validation that mirrors the existing start/stop commands, ensuring a consistent user experience.
Also applies to: 357-372
backends/advanced/init.py (1)
194-194: LGTM - Critical migration to explicit Parakeet provider naming.This change correctly updates the transcription provider value from "offline" to "parakeet", aligning with the PR's migration objectives and ensuring consistency across the codebase.
backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py (1)
31-35: LGTM - Consistent migration to explicit Parakeet configuration.The removal of the OFFLINE_ASR_TCP_URI fallback with clear warning messages ensures users explicitly configure PARAKEET_ASR_URL. The early return prevents misconfiguration issues.
backends/advanced/start-workers.sh (1)
65-75: LGTM: Parakeet worker startup condition correctly updated.The startup condition now relies solely on
PARAKEET_ASR_URL, removing theOFFLINE_ASR_TCP_URIfallback. This aligns with the PR's migration to explicit Parakeet naming.backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py (1)
306-320: LGTM: Provider auto-detection logic improved.The transcription provider detection has been refined to:
- Remove support for the generic "offline" provider
- Auto-detect based on
PARAKEET_ASR_URL(prefer Parakeet) orDEEPGRAM_API_KEY(fallback to Deepgram)- Raise a clear error when neither provider is configured
This makes the provider selection more explicit and easier to understand.
backends/advanced/tests/test_integration.py (2)
112-112: LGTM: Test audio path renamed to match Parakeet naming.The test audio constant has been renamed from
TEST_AUDIO_PATH_OFFLINEtoTEST_AUDIO_PATH_PARAKEET, and uses a shorter 10-second clip instead of the 4-minute audio file. This is a reasonable optimization for faster Parakeet provider testing.
718-720: LGTM: Provider-specific audio path selection.The audio upload logic now correctly selects the Parakeet-specific audio file when using the parakeet provider, falling back to the default audio file otherwise.
backends/advanced/run-test.sh (3)
42-60: LGTM: Environment loading precedence improved.The explicit priority order (CI environment > .env.test > .env) makes the configuration loading predictable and easier to debug. The clear error messages guide users when environment configuration is missing.
163-182: LGTM: Test execution and cleanup improved.The test runner now:
- Captures and reports test results with proper exit codes
- Ensures cleanup happens on both success and failure
- Provides clear feedback about test status
This is a solid improvement for both local development and CI/CD environments.
86-88: This case statement validation is correct. Both "offline" and "parakeet" remain valid transcription providers in the codebase (as evidenced by ongoing support inbackends/advanced/init.py:519), and they share the same requirement of no API key. The case statement accurately reflects current provider support.Likely an incorrect or invalid review comment.
extras/asr-services/quickstart.md (1)
44-48: Verify port 8765 actually serves HTTP for Parakeet ASR.The environment variable protocol change from
tcp://tohttp://is valid—Parakeet ASR supports HTTP as a standard transport protocol. However, port 8765 is non-standard for Parakeet deployments. Confirm this custom port is configured to serve HTTP endpoints for the Parakeet ASR service in your Chronicle backend.
| args: | ||
| CUDA_VERSION: ${CUDA_VERSION:-cu126} |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find docker-compose-test.yml and examine its full content
find . -name "docker-compose-test.yml" -type f 2>/dev/null | head -5Repository: chronicler-ai/chronicle
Length of output: 209
🏁 Script executed:
#!/bin/bash
# Read the docker-compose-test.yml file for the asr-services
cat -n ./extras/asr-services/docker-compose-test.ymlRepository: chronicler-ai/chronicle
Length of output: 1956
🏁 Script executed:
#!/bin/bash
# Find and read Dockerfile_Parakeet to verify CUDA_VERSION usage
find ./extras/asr-services -name "Dockerfile_Parakeet" -type f | xargs cat -nRepository: chronicler-ai/chronicle
Length of output: 1463
Fix build argument name mismatch: use PYTORCH_CUDA_VERSION instead of CUDA_VERSION.
The Dockerfile_Parakeet declares ARG PYTORCH_CUDA_VERSION on line 7 and uses it in the uv sync command, but the docker-compose file passes CUDA_VERSION as the build argument. The argument name must match. Update lines 33-34 to:
args:
PYTORCH_CUDA_VERSION: ${PYTORCH_CUDA_VERSION:-cu126}
Additionally, src/ is not volume mounted in this test configuration. Per the coding guidelines, run docker compose build so that code changes are reflected, not just docker compose restart.
🤖 Prompt for AI Agents
In extras/asr-services/docker-compose-test.yml around lines 33-34, the build arg
name is mismatched: replace the CUDA_VERSION arg with PYTORCH_CUDA_VERSION so it
matches ARG PYTORCH_CUDA_VERSION in Dockerfile_Parakeet (i.e., set
PYTORCH_CUDA_VERSION: ${PYTORCH_CUDA_VERSION:-cu126}); also note src/ is not
volume-mounted in this test compose so changes won’t be picked up by restart
alone — run docker compose build (then docker compose up/restart) to ensure code
changes are included.
|
| Metric | Count |
|---|---|
| ✅ Passed | 89 |
| ❌ Failed | 2 |
| 📊 Total | 91 |
📊 View Reports
GitHub Pages (Live Reports):
Download Artifacts:
- robot-test-reports-html - HTML reports
- robot-test-results-xml - XML output
…DA_VERSION for Parakeet ASR builds
Update Docker configuration to use PYTORCH_CUDA_VERSION instead of CU…
|
| Metric | Count |
|---|---|
| ✅ Passed | 90 |
| ❌ Failed | 1 |
| 📊 Total | 91 |
📊 View Reports
GitHub Pages (Live Reports):
Download Artifacts:
- robot-test-reports-html - HTML reports
- robot-test-results-xml - XML output
Starting releases with this. We can increment according to https://semver.org/
Lets make sure to not declare a v1.0 prematurely.
Summary by CodeRabbit
Release Notes
New Features
Documentation
Chores
✏️ Tip: You can customize this high-level summary in your review settings.